// 统计输入[7:0]data_in中1的个数
module top(
           input [7: 0] data,
           output [7: 0] number
       );

parameter m1 = 8'b01010101;
parameter m2 = 8'b00110011;
parameter m3 = 8'b00001111;

wire [7: 0]data1;
wire [7: 0]data2;

assign data1 = (data & m1) + ({data[0], data[7: 1]} & m1);
assign data2 = (data1 & m2) + ({data1[1: 0], data1[7: 2]} & m2);
assign number = (data2 & m3) + ({data2[3: 0], data2[7: 4]} & m3);

// 其他写法
// always@(data_in)begin
// 		cnt = 'd0;
// 		for(width = 0; width < 8; width = width + 1)begin
// 			if(data_in[width])
// 				cnt = cnt + 1'b1;
// 			else
// 				cnt = cnt;
// 		end
// 	end
// assign out = data_in[0] + data_in[1] + data_in[2] + data_in[3] + data_in[4] + data_in[5] + data_in[6] + data_in[7];
endmodule
